package ucla.axelia.modelo.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import ucla.axelia.modelo.data.DataGenerica;
import ucla.axelia.modelo.data.Reconocimiento;

public class ServicioReconocimientoDAO extends ServicioGenericoDAO {

	public ServicioReconocimientoDAO() {
		super(Reconocimiento.class);
	}

	public Reconocimiento buscarPorClave(Serializable clave) {
		// Buscar por la clave primaria en la tabla
		DataGenerica data = super.buscarPorClave(clave);
		return (data != null)? (Reconocimiento)data: null;
	}

	public List buscarPorEjemplo(Reconocimiento reconocimiento, String estado) {
		// Buscar todos los datos que se asemejan al objeto (parecido a un LIKE)
		return super.buscarPorEjemplo(reconocimiento, estado);
	}

	public List buscarPorEjemplo(Reconocimiento reconocimiento, String estado, int primero, int cantidad) {
		return super.buscarPorEjemplo(reconocimiento, estado, primero, cantidad);
	}

	public List buscarPorEjemplo(Reconocimiento reconocimiento, String estado, List orden) {
		return super.buscarPorEjemplo(reconocimiento, estado, orden);
	}

	public List buscarPorEjemplo(Reconocimiento reconocimiento, String estado, int primero, int cantidad, List orden) {
		return super.buscarPorEjemplo(reconocimiento, estado, primero, cantidad, orden);
	}

	public void eliminarFisicamente(Reconocimiento reconocimiento) {
		super.eliminarFisicamente(reconocimiento);
	}

	public void eliminarLogicamente(Reconocimiento reconocimiento, boolean eliminacionCascada) {
		// Hacer en eliminacion en cascada pasando TRUE
		super.eliminarLogicamente(reconocimiento, eliminacionCascada);
	}

	public void guardar(Reconocimiento reconocimiento) {
		Session session = super.getSession();
		if (reconocimiento.getIdReconocimiento() != null) {			
			String hql = "DELETE FROM ReconocimientoRequerido where reconocimientoByIdReconocimiento.idReconocimiento = :idReconocimiento";
			Query query = session.createQuery(hql);			
			query.setInteger("idReconocimiento", reconocimiento.getIdReconocimiento());
			query.executeUpdate();			
			hql = "DELETE FROM TipoActividadRequerida where reconocimiento = :idReconocimiento";
			query = session.createQuery(hql);
			query.setInteger("idReconocimiento", reconocimiento.getIdReconocimiento());
			query.executeUpdate();			
		}		
		super.guardar(reconocimiento);
	}

	public void restaurar(Reconocimiento reconocimiento, boolean restauracionCascada) {
		// Activar un objeto eliminado logicamente
		super.restaurar(reconocimiento, restauracionCascada);
	}

}
